1. Field of the Invention
The present invention relates to cloud based computing and more particularly to workload deployment in a multi-stage computing architecture implemented as a cloud based computing service.
2. Description of the Related Art
The software lifecycle of a computer program begins with development and ends with production and maintenance. In between development and production and maintenance can be found the testing phase and optionally the staging phase. Different instances of the same computer program can exist simultaneously to the extent that an instance experiencing software development and an instance in production utilized by end users are segregated so that development, testing and maintenance operations performed upon an instance of a computer program during software development do not affect the instance of computer program in production utilized by end users. A multi-stage computing architecture facilitates the segregation of the simultaneously co-existing instances of the computer program.
A multi-stage computing architecture is a computing architecture in which the deployment of different instances of a computer program are separated according to the different stage contemporaneously experienced by an instance of the computer program. In a multi-stage computing architecture, different nodes are provided such that each node is an isolated computing space configured to host the execution of an instance of a computer program. The nodes can be correspondingly different physical servers communicatively coupled to one another over a data communications network, or correspondingly different virtual machines executing in one or more physical servers coupled to one another over a data communications network, or a combination thereof. In the multi-stage computing architecture, a selected one of the nodes can host an instance of a computing application in accordance with its stage of the software lifecycle so as to not interfere with another executing instance of the computing application in a different one of the nodes at a different stage of the software lifecycle.
The multi-stage computing architecture traditionally is implemented in a dedicated private server farm associated with the deployment of one or more applications of a single organization. However, the advent of cloud computing and the “Platform as a Service” (PaaS) model has resulted in a number of organizations lacking the resources to support a dedicated private server farm, but with the need to utilize a multi-stage computing architecture. In this regard, in the PaaS model, a computing platform that includes one or more physical servers accessible over the global Internet is provided for use by different “tenants” in a multi-tenant computing environment. Each tenant deploys one or more application instances to the computing platform unawares of the co-execution of other application instances in the same computing platform by other tenants.
The PaaS model is not without its challenges. In a private, server farm, one end user controls common access to the computing resources of the server farm with a priori knowledge of the resource needs of each application instance since the end user also controls all of the applications instances. In comparison, in a multi-tenant computing environment the deployment of an application instance to the platform by a given tenant is not always known a priori by the host of the multi-tenant computing environment. Therefore, a degree of cooperation and coordination amongst the tenants is lacking though essential to optimizing utilization of the multi-tenant computing environment.